//实际上是判断两个数组是否完全相同

//方法一：排序+遍历
int cmp(const void* pa, const void* pb){
    return (*(int*)pa - *(int*)pb);
}
bool canBeEqual(int* target, int targetSize, int* arr, int arrSize) {
    qsort(target, targetSize, sizeof(int), cmp);
    qsort(arr, arrSize, sizeof(int), cmp);

    int i = 0;
    while(i < targetSize && arr[i] == target[i]){
        i++;
    }
    return i == targetSize;
}

//方法二：哈希表+遍历
bool canBeEqual(int* target, int targetSize, int* arr, int arrSize) {
    int hash1[1001] = {0}, hash2[1001] = {0};
    for(int i = 0; i < targetSize; i++){
        hash1[target[i]]++;
        hash2[arr[i]]++;
    }
    int k = 0;
    while(k < 1001 && hash1[k] == hash2[k]){
        k++;
    }
    return k == 1001;
}

/*给你两个长度相同的整数数组 target 和 arr 。每一步中，你可以选择 arr 的任意非空子数组并将它翻转。你可以执行此过程任意次。

如果你能让 arr 变得与 target 相同，返回 True；否则，返回 False 。*/